# -*- coding:utf-8 -*-
# --author： jingfeng 
# time: 2018/12/8



import multiprocessing  # 分布式进程
import multiprocessing.managers  # 分布式进程管理器
import random
import time
import queue
import threading

task_queue = queue.Queue()
result_email_queue = queue.Queue()
url_queue = queue.Queue()    # 结果url


def return_task():  # 返回任务队列
    return task_queue


def return_email_result():  # 返回结果队列
    return result_email_queue

def return_result_url():
    return url_queue

class QueueManger(multiprocessing.managers.BaseManager):  # 继承，进程管理共享数据
    pass

def get_email_from_client(result):

    save_file =open('email.txt', 'w', encoding='utf-8')

    try:
        while True:
            time.sleep(10)
            res = result.get(timeout=1000)
            print('get data',res)

            save_file.write(str(res) + '\n')
            save_file.flush()
    except:
        pass

    save_file.close()


if __name__ == '__main__':
    multiprocessing.freeze_support()  # 开启分布式支持
    QueueManger.register('get_task', callable=return_task)  # 注册两个函数，给客户端调用的作用
    QueueManger.register('get_result_email', callable=return_email_result)
    QueueManger.register('get_result_url', callable=return_result_url)

    manger = QueueManger(address=('192.168.1.174', 65034),
                         authkey='000000'.encode('utf-8'))  # 初始化，创建一个管理器   authkey='czp0927'密码
    manger.start()  # 开启

    task, result_email = manger.get_task(), manger.get_result_email()  # 任务，结果   调用注册的那个名字

    result_url = manger.get_result_url()

    visited_url = set()


    task.put('http://bbs.tianya.cn/post-140-393973-1.shtml')
    print('wait **********')

    # 保存邮箱开一个线程

    threading.Thread(target=get_email_from_client, args=(result_email,)).start()



    for i in range(10000):
        res = result_url.get(timeout=100)
        if res in visited_url:
            pass

        else:
            task.put(res)
            url_queue.put(res)
            # print('get data:', res)

    manger.shutdown()  # 关闭服务器
